#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 函数：模拟FIFO（先进先出）页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void printStatus(int curr[], int num, int req) {
    printf("Access:%d,Frames: [", req);
    for (int i = 0; i < num; i++)
    {
        printf("%d", curr[i]);
        if (i != num - 1)
        {
            printf(",");
        }
    }
    printf("]\n");
}

void fifo_page_replacement (char *queue_frames, int num) {
    // TODO
    int cur_id = 0;
    int que[num];
    for (int i = 0; i < num; i ++)
        que[i] = -1;

    while(*queue_frames) {
        char cu = *queue_frames;
        queue_frames ++;
        if (cu == ',') 
            continue;

        int target = cu - '0';
        if (que[cur_id] == -1) {
            que[cur_id] = target;
            cur_id ++;
            cur_id %= num;
        } else {
            int flag = 0;
            for (int i = 0; i < num; i ++) {
                if (que[i] == target) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 0) {
                que[cur_id] = target;
                cur_id ++;
                cur_id %= num;
            }
        }

        printStatus(que, num, target);
    }
}
